// 引入路由模块
const { Router } = require('express')
// 创建一个路由实例
const router = new Router()

// 引入用户信息表模型
const userImformationModel = require('../../model/userImformation')

// 引入fs模块
const fs = require('fs')
// 引入path模块
const path = require('path')

const moveFile = require('../../utils/fileUtils/moveFile')
const removeFile = require('../../utils/fileUtils/removeFile')
// 引入url
const url = require('../../config/url')
const regUrl = url.substr(0, url.length - 1)

router.post('/changeInformation',(request, response)=>{
    const { _id, user } = request.body

    const data = {
        code: '200',
        data: 'error',
        msg: '修改个人信息失败'
    }

    userImformationModel.findOne({
        count: user,
        _id
    },function (err,doc) {
        if (err) return response.json(data)

        const { _id, user, imgUrl, nickname, signature, sex, email } = request.body

        const findData = {
            count: user,
            _id,
        }
        const option = {
            nickname,
            signature,
            sex,
            email
        }

        // 如果图片未修改，就直接写内容就行了，如果图片修改了，就要先搬运好图片在修改相应字段
        if (doc.imgUrl == imgUrl){
            oprate(findData,option,response)
        }else {
            // 需要移动的文件名
            const fileName = path.parse(imgUrl).base
            // 需要移动到的文件路径
            const newPath = path.resolve(__dirname,'../../public/free/userPic',fileName)
            // 旧文件路径
            const oldPath = path.resolve(__dirname,'../../public/free/temp',fileName)

            moveFile(newPath,oldPath, status =>{
                if (!status.isSuccess) return response.json(data)

                // 用正则去匹配相应的字符串，并且替换成服务器内部的地址
                const reg = new RegExp(regUrl,'g')
                const oldFilePath = doc.imgUrl.replace(reg, path.resolve(__dirname,'../../'))

                removeFile(oldFilePath, status1=>{
                    if (!status1.isSuccess) return response.json(data)

                    option.imgUrl =  `${url}public/free/userPic/${fileName}`
                    oprate(findData, option, response)
                })
            })
        }
    })
})

function oprate(findData, option, response){
    const data = {
        code: '200',
        data: 'error',
        msg: '修改个人信息失败'
    }

    userImformationModel.findOneAndUpdate(findData,option,(err,doc) => {
        if (err){
            // console.log(err)
            data.msg = '修改个人信息失败'
        }else {
            // 下面因为接口文档不想更改，修改代码的时候就没动了
            if (!doc && typeof doc != "undefined" && doc != 0){
                data.msg = '修改个人信息失败'
                data.data = '修改个人信息失败'
            }else {
                data.msg = '修改成功'
                data.data = '修改成功'
            }
        }
        response.json(data)
    })
}

module.exports = router
